home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 151-175 / scopedisk161 / cgnhlp / breaku.f < prev    next >
Text File  |  1995-03-19  |  2KB  |  57 lines

  1. C------------------------------------------------------------------
  2.       SUBROUTINE BREAKU( STRING, MAXFLD, NFIELD, FIELD )
  3. C     BREAK THE STRING UN INTO ITS FIELDS (FIELDS ARE SPERATED 
  4. C        BY BLANKS OR TABS).
  5.       IMPLICIT NONE
  6.       CHARACTER*(*) FIELD(MAXFLD), STRING
  7.       INTEGER MAXFLD, NFIELD
  8.       INTEGER I, L, LEN, J, I1
  9.       LOGICAL QUOTE
  10. C
  11.       L = LEN(STRING)
  12.       NFIELD = 0
  13.       I = 0
  14. C
  15.  2000 I = I + 1
  16.       IF( I .LE. L ) THEN
  17.          IF( STRING(I:I) .GT. ' ' ) THEN
  18. C           FOUND BEGINNING OF THE FIELD.
  19.             IF( STRING(I:I) .EQ. '"' .OR. STRING(I:I) .EQ. '''' ) THEN
  20.                QUOTE = .TRUE.
  21.                I = I + 1
  22.             ELSE
  23.                QUOTE = .FALSE.
  24.             ENDIF
  25. C           IF QUOTED STRING, SEARCH FOR MATCHING END QUOTE.
  26. C           OTHERWISE SEARCH FOR A BLANK.
  27.             DO 3000 J=I+1,L
  28.                IF( ( QUOTE .AND. STRING(J:J) .EQ. STRING(I-1:I-1) ) .OR.
  29.      +             ( .NOT. QUOTE .AND. STRING(J:J) .LE. ' ' ) ) THEN
  30. C                 FOUND END OF FIELD.
  31.                   I1 = J - 1
  32.                   GOTO 4000
  33.                ENDIF
  34.  3000       CONTINUE
  35.             I1 = L
  36.  4000       IF( NFIELD .LT. MAXFLD ) THEN
  37.                NFIELD = NFIELD + 1
  38. C               IF( QUOTE ) THEN
  39. C                 RETURN QUOTES AS PART OF STRING
  40. C                  FIELD(NFIELD) = STRING(I-1:I1+1)
  41. C               ELSE
  42.                FIELD(NFIELD) = STRING(I:I1)
  43. C               ENDIF
  44.             ENDIF
  45.             IF( QUOTE ) THEN
  46.                I1 = I1 + 1
  47.             ENDIF
  48.             I = I1 
  49.          ENDIF
  50.          GOTO 2000
  51.       ENDIF
  52.       DO 5000 I=NFIELD+1,MAXFLD
  53.          FIELD(I) = ' '
  54.  5000 CONTINUE
  55.       RETURN
  56.       END
  57.